<!doctype html>
<html>
<body>

<script>

	function MyClass() {
	
		var that = this;
	
		// есть доступ из функций, есть доступ извне
		this.publicInstanceVariable = "text1";
		
		// есть доступ из функций, нет доступа извне
		var privateVariable = "text2";
	
		// нет доступа к этому приватному методу извне
		var privateMethod = function(arg) {
		
			alert("publicInstanceVariable=" + that.publicInstanceVariable + ", privateVariable=" + privateVariable + ", " + arg);
		
		}
	
		// есть доступ к этому публичному методу извне
		this.publicMethod = function(arg) {
		
			// есть доступ к приватному методу изнутри публичного метода
			privateMethod(arg);
		}
	}

	var c = new MyClass();

	try {
		alert(c.publicInstanceVariable); // есть доступ
	} catch (error) {
		alert("error accessing c.publicInstanceVariable: " + error);
	}

	try {
		alert(privateVariable); // нет доступа
	} catch (error) {
		alert("error accessing privateVariable: " + error);
	}
		
	try {
		c.publicMethod("public method argument"); // есть доступ
	} catch (error) {
		alert("error accessing c.publicMethod: " + error);
	}
	
	try {
		c.privateMethod("private method argument"); // нет доступа
	} catch (error) {
		alert("error accessing c.privateMethod: " + error);
	}
	
</script>

</body>
</html>
